﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//不能创建临时变量（第三个变量）实现两个数交换
//int main()
//{
//	int a = 5;// 0101
//	int b = 15;//1111
//	//第一种
//	//a = a + b;
//	//b = a - b;
//	//a = a - b;
//	//第二种
//	a = a ^ b;
//	b = a ^ b;
//	a = a ^ b;
//	printf("a=%d,b=%d", a, b);
//	return 0;
//}


////求⼀个整数存储在内存中的⼆进制中1的个数。
////第一种方法
//int main()
//{
//	int n = 0;
//	int i = 0;
//	int count=0;
//	scanf("%d", &n);
//	for (i = 0; i < 32; i++)
//	{
//		if ((n >> i) & 1 == 1)
//		{
//			count++;
//		}
//	}
//	printf("%d", count);
//	return 0;
//}
//
////第二种方法
////考虑的是10进制转二进制
//int count_one_bit(unsigned int n)//unsigned代表的是无符号位，前面的符号位就当常数
//{
//	int count = 0;
//	while (n)
//	{
//		if (n % 2 == 1)
//			count++;
//		n = n / 2;
//	}
//	return count;
//}
//
//int main()
//{
//	int num = 0;
//	scanf("%d", &num);
//	//求一个整数存储在内存中的二进制中1的个数
//	int n = count_one_bit(num);
//	printf("%d\n", n);
//
//	return 0;
//}
//
////第三种方法
////n=n&(n-1)——>有几个1计算几次
//int main()
//{
//	int n;
//	int count=0;
//	scanf("%d", &n);
//	while(n)
//	{
//		n = n & (n - 1);
//		count++;
//	}
//	printf("%d", count);
//	return 0;
//}

//通常的方法是
//int main()
//{
//	int n = 0;
//	int count = 0;
//	scanf("%d", &n);
//	while (n)
//	{
//		if (n % 2 == 0||n==1)
//		{
//			n = n / 2;
//			count++;
//		}
//		else
//		{
//			printf("错误\n");
//			break;
//		}
//	}
//	printf("执行了%d次", count-1);
//	return 0;
//}
//
////这里就可以用到n=n&（n-1）
////是不是相当于2的次方就是二进制只有一个1
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	if ((n & (n - 1)) == 0)
//	{
//		printf("yes");
//	}
//	else
//		printf("no");
//	return 0;
//}

//struct Point
//{
//	int x;
//	int y;
//}p = { 1,2 };
//int main()
//{
//	printf("x: %d y: %d\n", p.x, p.y);//其中这个点则是结构体成员访问操作符
//	//使用方式是，，，，结构体变量名.成员名
//	return 0;
//}


//struct Point
//{
//	int x;
//	int y;
//};
//int main()
//{
//	struct Point p = { 3, 4 };
//	struct Point* ptr = &p;
//	ptr->x = 10;
//	ptr->y = 20;
//	printf("x = %d y = %d\n", ptr->x, ptr->y);//使用方式则是结构体指针->成员名
//	return 0;
//}



int main()
{
	//char类型的取值范围是-128~127
	//char是一个字节
	char c1 = 125;
	//00000000000000000000000001111101
	//01111101——>但是char只有一个bit位，发生截断
	char c2 = 10;
	//00000000000000000000000000001010
	//00001010
	char c3 = c1 + c2;
	//01111101
	//00001010
	//相加----因为c1和c2有符号
	//发生整形提升
	//00000000000000000000000001111101
	//00000000000000000000000000001010
	//00000000000000000000000010000111
	//10000111 - c3
	printf("%d\n", c3);
	//%d是打印有符号的整数
	//c3发生整形提升
	//又因为char有符号
	//11111111111111111111111110000111--->c3的补码
	//补码转换成原码打印
	return 0;
}











